/* =============================================================================
 * PROJET           	: Matrices creuses
 * NOM DU FICHIER   	: Traitement.h
 * OBJET            	: Declaration des fonctions de traitement
 * --------------------------------------------------------------------------------
 * DATE DE CREATION 	: 10/04/2009
 * AUTEUR           	: Ivan VALIMAHAMED, Sha LIU, Yves BOGE
 * --------------------------------------------------------------------------------
 * MODIFICATIONS (   n) date - auteur - description )
 * ============================================================================= */

#include "Matrices_creuses.h"


/*
 *	NOM 				: Choisir_valeur
 *	ENTREES 			: i numero de la variable choisie
 *						: io_Mat matrice de type t_Matrice
 *	SORTIES			: valeur choisie pour la variable Xi (0 ou 1)
 *	BUT				: recherche une valeur possible a affecter a Xi
 */

int Choisir_valeur(int i, t_Matrice* io_Mat);


/*
 *	NOM 				: Simplifier
 *	ENTREES 			: i numero de la variable choisie
 *						: v valeur choisie pour Xi
 *						: io_Mat matrice de type t_Matrice
 *	SORTIES			: valeur choisie pour la variable Xi (0 ou 1)
 *	BUT				: Simplifier les clauses contenant la variable Xi precedement choisie
 */

void Simplifier (int i, int v, t_Matrice* io_Mat);



/*
 *	NOM 			: Choix_variable
 *	ENTREES 		: pointeur sur la matrice
 *	SORTIES		: le numero de la variable choisit
 *	BUT			: Choisir la variable a laquelle on va donner une valeur pour
 *					: simplifier la matrice
 */

void Choix_variable (t_Matrice* i_Matrice, int* o_Clause, int* o_Var);


/*
 *	NOM 			: Toutes_clauses_satisfaites
 *	ENTREES 		: pointeur sur la matrice
 *	SORTIES		: booleen : vrai si toutes les clauses dans la matrice sont satisfaites, faux sinon
 *	BUT			: savoir si la valeur choisit pour la variable est correcte
 */

int Toutes_clauses_satisfaites (t_Matrice* i_Matrice);


/*
 *	NOM 			: Une_clause_falsifiee
 *	ENTREES 		: pointeur sur la matrice
 *	SORTIES		: booleen : vrai si la matrice a au moins une clause falsifiee, faux sinon
 *	BUT			: savoir si la valeur choisit pour la variable est correct
 */

int Une_clause_falsifiee (t_Matrice* i_Matrice);


/*
 *	NOM 			: Put_fonction_reduite
 *	ENTREES 		: pointeur sur la matrice
 *	SORTIES		: void
 *	BUT			: affiche en console la fonction simplifiee
 */

void Put_fonction_reduite (t_Matrice* i_Matrice);


/*
 *	NOM 			: Resolution
 *	ENTREES 		: io_Matrice : pointeur sur la matrice
 *			 		: i_Trace : booleen indiquant au programme s'il doit activer l'affichage de la trace
 *			 		: i_Matrice : booleen indiquant au programme s'il doit activer l'affichage de la matrice
 *	SORTIES		: booleen : vrai si il existe une affectation de valeurs aux variables telle que la formule ait la valeur 1, faux sinon
 *	BUT			: savois si il existe une solution pour la formule
 */

int Resolution ( t_Matrice* io_Matrice, int i_Trace, int i_Matrice );


/*
 *	NOM 			: Put_infos_matrice
 *	ENTREES 		: pointeur sur la matrice
 *	SORTIES		: void
 *	BUT			: affiche en console les informations permettant de visualiser
 * 				: l'etat de la matrice
 */

void Put_infos_matrice (t_Matrice* i_Matrice);
